home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 July / CMCD0704.ISO / Software / Freeware / Comunicatii / htttrack / httrack-3.32-2.exe / {app} / src_win / WinHTTrack / WinHTTrack.cpp < prev    next >
C/C++ Source or Header  |  2004-02-14  |  22KB  |  862 lines

  1. // WinHTTrack.cpp : Defines the class behaviors for the application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "WinHTTrack.h"
  6.  
  7. #include "Shell.h"
  8. #include "winsock.h"
  9.  
  10. #include "wid1.h"
  11. #include "maintab.h"
  12.  
  13. #include "MainFrm.h"
  14. #include "splitter.h"
  15. #include "about.h"
  16.  
  17. #include "WinHTTrackDoc.h"
  18. #include "WinHTTrackView.h"
  19.  
  20. #include "inprogress.h"
  21.  
  22. /* HTS - HTTRACK */
  23. extern "C" {
  24.   #include "HTTrackInterface.h"
  25.   #include "htsbase.h"
  26.   #include "htsglobal.h"
  27. };
  28.  
  29. #ifdef _DEBUG
  30. #define new DEBUG_NEW
  31. #undef THIS_FILE
  32. static char THIS_FILE[] = __FILE__;
  33. #endif
  34.  
  35. //
  36. #include "DialogContainer.h"
  37. #include "InfoUrl.h"
  38.  
  39. // PAS de domodal a l'exterieur!!!!!
  40. #include "wizard.h"
  41. #include "wizard2.h"
  42. #include "WizLinks.h"
  43. extern char WIZ_question[1000];
  44. extern char WIZ_reponse[1000];
  45.  
  46.  
  47. extern Wid1* dialog1;
  48. extern CMainTab* maintab;
  49. extern Cinprogress* inprogress;
  50. extern CShellApp* CShellApp_app;
  51. extern int termine;
  52. extern int termine_requested;
  53. extern int soft_term_requested;
  54. extern int shell_terminated;
  55. extern CInfoUrl* _Cinprogress_inst;
  56. extern int LibRasUse;
  57.  
  58. /*extern "C" {
  59.   char* hts_rootdir(char* file);
  60. };*/
  61.  
  62.  
  63. // rmdir
  64. #include <direct.h>
  65.  
  66. // linput
  67. /*extern "C" {
  68.   void linput(FILE* fp,char* s,int max);
  69.   void linput_trim(FILE* fp,char* s,int max);
  70.   void linput_cpp(FILE* fp,char* s,int max);
  71. };*/
  72.  
  73. /* WinHTTrack refresh Mutex */
  74. HANDLE WhttMutex;
  75.  
  76. /* Location */
  77. char* WhttLocation="";
  78.  
  79.  
  80. // HTTrack main vars
  81. HWND App_Main_HWND;
  82. CSplitterFrame* this_CSplitterFrame=NULL;
  83. HICON httrack_icon;
  84. // Helper
  85. LaunchHelp* HtsHelper=NULL;
  86.  
  87. // dirtreeview
  88. #include "DirTreeView.h"
  89. extern CDirTreeView* this_DirTreeView;
  90.  
  91. // New Project
  92. #include "NewProj.h"
  93. extern CNewProj* dialog0;
  94.  
  95.  
  96. // InfoEnd
  97. #include "infoend.h"
  98. extern Cinfoend* this_Cinfoend;
  99.  
  100. // Pointeur sur nous
  101. CWinHTTrackApp* this_app=NULL;
  102.  
  103. // fexist
  104. extern "C" int fexist(char*);
  105.  
  106. /////////////////////////////////////////////////////////////////////////////
  107. // CWinHTTrackApp
  108.  
  109. BEGIN_MESSAGE_MAP(CWinHTTrackApp, CWinApp)
  110.     //{{AFX_MSG_MAP(CWinHTTrackApp)
  111.     ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
  112.     ON_COMMAND(ID_FILE_SAVE, OnFileSave)
  113.     ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
  114.     ON_COMMAND(ID_FILE_MRU_FILE1, OnFileMruFile1)
  115.     //}}AFX_MSG_MAP
  116.   ON_COMMAND(wm_ViewRestart,OnViewRestart)
  117.   ON_COMMAND(wm_WizRequest1,OnWizRequest1)
  118.   ON_COMMAND(wm_WizRequest2,OnWizRequest2)
  119.   ON_COMMAND(wm_WizRequest3,OnWizRequest3)
  120.     // Standard file based document commands
  121.     //ON_COMMAND(ID_FILE_WIZARD, OnWizard)
  122.     ON_COMMAND(ID_FILE_NEW, OnFileNew)
  123.     ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
  124.     ON_COMMAND(ID_FILE_DELETE_PROJ, OnFileDelete)
  125.     ON_COMMAND(ID_FILE_BROWSE_SIT, OnBrowseWebsites)
  126.   ON_COMMAND(IDC_langprefs,Onipabout)
  127.   ON_COMMAND(ID_ABOUT,Onipabout)
  128.   ON_COMMAND(ID_UPDATE,OnUpdate)
  129.     ON_COMMAND(ID_HELP_FINDER,OnHelpInfo2)
  130.     ON_COMMAND(ID_HELP,OnHelpInfo2)
  131.     //ON_COMMAND(ID_CONTEXT_HELP,OnContextHelp)
  132.     ON_COMMAND(ID_DEFAULT_HELP,OnHelpInfo2)
  133.   // Forward to inprogress
  134.   ON_BN_CLICKED(ID_LOAD_OPTIONS,FwOnLoadprofile)
  135.   ON_BN_CLICKED(ID_FILE_SAVE_OPTIONS_AS,FwOnSaveprofile)
  136.     ON_BN_CLICKED(ID_LoadDefaultOptions, FwOnLoaddefault)
  137.     ON_BN_CLICKED(ID_SaveDefaultOptions, FwOnSavedefault)
  138.     ON_BN_CLICKED(ID_ClearDefaultOptions,FwOnResetdefault)
  139.   //
  140.   ON_BN_CLICKED(ID_WINDOW_HIDE,FwOnhide)
  141.   //
  142.     ON_BN_CLICKED(ID_OPTIONS_MODIFY,FwOnModifyOpt)
  143.     ON_BN_CLICKED(ID_FILE_PAUSE,FwOnPause)
  144.     ON_BN_CLICKED(ID_LOG_VIEWLOG,FwOniplogLog)
  145.     ON_BN_CLICKED(ID_LOG_VIEWERRORLOG,FwOniplogErr)
  146.     ON_BN_CLICKED(ID_LOG_VIEWTRANSFERS,FwOnViewTransfers)
  147. END_MESSAGE_MAP()
  148.  
  149. /////////////////////////////////////////////////////////////////////////////
  150. // CWinHTTrackApp construction
  151.  
  152. CWinHTTrackApp::CWinHTTrackApp()
  153. {
  154.   // HTTrack inits
  155.   CreateMutex(NULL, FALSE, "WinHTTrack_RUN");
  156.   HtsHelper = new LaunchHelp();
  157. }
  158.  
  159. CWinHTTrackApp::~CWinHTTrackApp()
  160. {
  161.   DeleteTabs();
  162.   delete HtsHelper;
  163.   HtsHelper=NULL;
  164. }
  165.  
  166. /////////////////////////////////////////////////////////////////////////////
  167. // The one and only CWinHTTrackApp object
  168.  
  169. CWinHTTrackApp theApp;
  170.  
  171. /////////////////////////////////////////////////////////////////////////////
  172. // CWinHTTrackApp initialization
  173.  
  174. void InitCBErrMsg(char* msg, char* file, int line) {
  175.   CString st;
  176.   st.Format("A fatal error has occured\r\n%s"
  177.     "\r\nin file '%s', line %d\r\n"
  178.     "Please report the problem at http://forum.httrack.com\r\n"
  179.     "using the CRASH.TXT file generated in the WinHTTrack directory\r\n"
  180.     "Thank you!", msg, file, line);
  181.   AfxMessageBox(st, MB_OK|MB_APPLMODAL|MB_SYSTEMMODAL|MB_ICONSTOP);
  182. }
  183. void InitCBErr() {
  184.   htsCallbackErr = InitCBErrMsg;
  185. }
  186.  
  187. int Eval_Exception( void );
  188.  
  189. int Eval_Exception ( int n_except )
  190. {
  191.     AfxMessageBox("error");
  192.  
  193.     return 0;
  194. }
  195.  
  196. /*extern "C" {
  197.   int hts_init(void);
  198.   void hts_uninit(void);
  199. }*/
  200.  
  201. BOOL CWinHTTrackApp::InitInstance()
  202. {
  203.   InitCBErr();
  204.   hts_init();
  205.  
  206.   WhttMutex = CreateMutex(NULL,FALSE,NULL);
  207.  
  208.   // Change the registry key under which our settings are stored.
  209.   // TODO: You should modify this string to be something appropriate
  210.   // such as the name of your company or organization.
  211.   SetRegistryKey("WinHTTrack Website Copier");
  212.   LANG_INIT();    // petite init langue
  213.   
  214.   /* INDISPENSABLE pour le drag&drop! */
  215.   if (!AfxOleInit())
  216.   {
  217.       AfxMessageBox(LANG(LANG_F1));
  218.       return FALSE;
  219.   }
  220.   AfxEnableControlContainer();
  221.   
  222.   // Pointeur sur CShellApp
  223.   CShellApp_app=&app;
  224.   this_app=this;
  225.   _Cinprogress_inst=NULL;
  226.   LibRasUse=0;
  227.  
  228.     // Standard initialization
  229.     // If you are not using these features and wish to reduce the size
  230.     //  of your final executable, you should remove from the following
  231.     //  the specific initialization routines you do not need.
  232.  
  233.     httrack_icon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  234.  
  235.     LoadStdProfileSettings();  // Load standard INI file options (including MRU)
  236.  
  237.     // Register the application's document templates.  Document templates
  238.     //  serve as the connection between documents, frame windows and views.
  239.  
  240.   // DOC //
  241.     CMultiDocTemplate* pDocTemplate;
  242.     pDocTemplate = new CMultiDocTemplate(
  243.         IDR_MAINFRAME,
  244.         RUNTIME_CLASS(CWinHTTrackDoc),
  245.         RUNTIME_CLASS(CSplitterFrame),       // main SDI frame window
  246.         RUNTIME_CLASS(CView)); 
  247.     AddDocTemplate(pDocTemplate);
  248.  
  249.   /*
  250.     CMDIFrameWnd* pMainFrame = new CMDIFrameWnd;
  251.     if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
  252.         return FALSE;
  253.   */
  254.  
  255.     // create main window
  256.     CMainFrame* pMainFrame = new CMainFrame;
  257.     if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
  258.         return FALSE;
  259.     m_pMainWnd = pMainFrame;
  260.     int nCmdShow = m_nCmdShow;
  261.  
  262.  
  263.   // Also in this example, there is only one menubar shared between
  264.     //  all the views.  The automatic menu enabling support of MFC
  265.     //  will disable the menu items that don't apply based on the
  266.     //  currently active view.  The one MenuBar is used for all
  267.     //  document types, including when there are no open documents.
  268.  
  269.   // enable file manager drag/drop and DDE Execute open
  270.     pMainFrame->DragAcceptFiles();
  271.  
  272.   // Now finally show the main menu
  273.     //pMainFrame->ShowWindow(m_nCmdShow);
  274.     //pMainFrame->UpdateWindow();
  275.     m_pMainWnd = pMainFrame;
  276.  
  277.   // command line arguments are ignored, create a new (empty) document
  278.     //OnFileNew();
  279.   // DOC //
  280.  
  281.     // Parse command line for standard shell commands, DDE, file open
  282.     CCommandLineInfo cmdInfo;
  283.     ParseCommandLine(cmdInfo);
  284.  
  285.   hts_rootdir((char*)AfxGetApp()->m_pszHelpFilePath);
  286.  
  287.   // Restore position
  288.     ((CMainFrame*)m_pMainWnd)->InitialShowWindow(nCmdShow);
  289.     pMainFrame->UpdateWindow();
  290.  
  291.     // Dispatch commands specified on the command line
  292.     if (!ProcessShellCommand(cmdInfo))
  293.         return FALSE;
  294.  
  295.   // Init Winsock
  296.   WSockInit();
  297.  
  298.     // The one and only window has been initialized, so show and update it.
  299.     //m_pMainWnd->ShowWindow(SW_SHOW);
  300.     //m_pMainWnd->UpdateWindow();
  301.  
  302.   /*CWinApp* app=AfxGetApp();
  303.   POSITION pos;
  304.   pos=app->GetFirstDocTemplatePosition();
  305.   CDocTemplate* templ = app->GetNextDocTemplate(pos);
  306.   pos=templ->GetFirstDocPosition();
  307.   CDocument* doc  = templ->GetNextDoc(pos);
  308.  
  309.   CRuntimeClass* pRuntimeClass = RUNTIME_CLASS( CTest );
  310.   CObject* pObject = pRuntimeClass->CreateObject();
  311.   ASSERT( pObject->IsKindOf( RUNTIME_CLASS( CTest ) ) );
  312.   
  313.   doc->AddView((CView*) pObject);
  314.   */
  315.  
  316.   {
  317.     // enable file manager drag/drop and DDE Execute open
  318.     EnableShellOpen();
  319.     RegisterShellFileTypes();
  320.     // register "New File" handler
  321.     HKEY phkResult;
  322.     DWORD creResult;
  323.     if (RegCreateKeyEx(HKEY_CLASSES_ROOT,".whtt",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&phkResult,&creResult)==ERROR_SUCCESS) {
  324.       RegCloseKey(phkResult);
  325.       if (RegCreateKeyEx(HKEY_CLASSES_ROOT,".whtt\\ShellNew",0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&phkResult,&creResult)==ERROR_SUCCESS) {
  326.         char voidbuff='\0';
  327.         RegSetValueEx(phkResult,"NullFile",0,REG_SZ,(LPBYTE)&voidbuff,1);
  328.         RegCloseKey(phkResult);
  329.       }
  330.     }   
  331.  
  332.     // Infos la 1ere fois!
  333.     CWinApp* pApp = AfxGetApp();
  334.     if (pApp->GetProfileInt("Interface","FirstRun",0) != 3) {
  335.       pApp->WriteProfileInt("Interface","FirstRun",3);
  336.  
  337.       Cabout about;
  338.       about.DoModal();
  339.       
  340.       // Default proxy?
  341.       if (maintab) {
  342.         maintab->DefineDefaultProxy();
  343.         if (maintab->DoModal()!=IDCANCEL) {
  344.           // Default proxy values
  345.           CString strSection       = "OptionsValues";
  346.           MyWriteProfileString("",strSection, "Proxy",maintab->m_option10.m_proxy);
  347.           MyWriteProfileString("",strSection, "Port",maintab->m_option10.m_port);
  348.         }
  349.         maintab->UnDefineDefaultProxy();
  350.       }
  351.     }
  352.   }
  353.   
  354.  
  355. #ifdef HTTRACK_AFF_WARNING
  356. #ifndef _DEBUG
  357.   AfxMessageBox("--WARNING--\r\n"HTTRACK_AFF_WARNING);
  358. #endif
  359. #endif
  360.  
  361.   return TRUE;
  362. }
  363.  
  364.  
  365. BOOL CWinHTTrackApp::WSockInit() {
  366.   // Initialiser WINSOCK
  367.   WORD   wVersionRequested; /* requested version WinSock API */ 
  368.   WSADATA wsadata;        /* Windows Sockets API data */
  369.   {
  370.     int stat;
  371.     wVersionRequested = 0x0101;
  372.     stat = WSAStartup( wVersionRequested, &wsadata );
  373.     if (stat != 0) {
  374.       //HTS_PANIC_PRINTF("Winsock not found!\n");
  375.     } else if (LOBYTE(wsadata.wVersion) != 1  && HIBYTE(wsadata.wVersion) != 1) {
  376.       //HTS_PANIC_PRINTF("WINSOCK.DLL does not support version 1.1\n");
  377.       WSACleanup();
  378.     }
  379.   }
  380.   // Fin Initialiser WINSOCK
  381.   return TRUE;
  382. }
  383.  
  384. /////////////////////////////////////////////////////////////////////////////
  385. // CAboutDlg dialog used for App About
  386.  
  387. /*
  388. class CAboutDlg : public CDialog
  389. {
  390. public:
  391.     CAboutDlg();
  392.  
  393. // Dialog Data
  394.     //{{AFX_DATA(CAboutDlg)
  395.     enum { IDD = IDD_ABOUTBOX };
  396.     //}}AFX_DATA
  397.  
  398.     // ClassWizard generated virtual function overrides
  399.     //{{AFX_VIRTUAL(CAboutDlg)
  400.     protected:
  401.     virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  402.     //}}AFX_VIRTUAL
  403.  
  404. // Implementation
  405. protected:
  406.     //{{AFX_MSG(CAboutDlg)
  407.         // No message handlers
  408.     //}}AFX_MSG
  409.     DECLARE_MESSAGE_MAP()
  410. };
  411.  
  412. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  413. {
  414.     //{{AFX_DATA_INIT(CAboutDlg)
  415.     //}}AFX_DATA_INIT
  416. }
  417.  
  418. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  419. {
  420.     CDialog::DoDataExchange(pDX);
  421.     //{{AFX_DATA_MAP(CAboutDlg)
  422.     //}}AFX_DATA_MAP
  423. }
  424.  
  425. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  426.     //{{AFX_MSG_MAP(CAboutDlg)
  427.         // No message handlers
  428.     //}}AFX_MSG_MAP
  429. END_MESSAGE_MAP()
  430. */
  431.  
  432. // App command to run the dialog
  433. void CWinHTTrackApp::OnAppAbout()
  434. {
  435.   Cabout about;
  436.   about.DoModal();
  437. //    CAboutDlg aboutDlg;
  438. //    aboutDlg.DoModal();
  439. }
  440.  
  441.  
  442. /* Request: Set new view in the splitter window (when clicking on finished, for example) */
  443. /*extern "C" {
  444.   int hts_resetvar(void);
  445. }*/
  446.  
  447. void CWinHTTrackApp::OnViewRestart() {
  448.   //CloseAllDocuments(FALSE);
  449.   //OnFileNew();
  450.  
  451.   /* Free library */
  452.   WHTT_LOCK();
  453.   hts_resetvar();
  454.   WHTT_UNLOCK();
  455.  
  456.   this_CSplitterFrame->SetNewView(0,1,RUNTIME_CLASS(CDialogContainer));
  457. }
  458.  
  459. void CWinHTTrackApp::OnWizRequest1() {
  460.   wizard diawiz;
  461.   diawiz.m_question=WIZ_question;
  462.   diawiz.DoModal();
  463.   strcpybuff(WIZ_reponse,diawiz.m_reponse);
  464. }
  465.  
  466. void CWinHTTrackApp::OnWizRequest2() {
  467.   wizard2 diawiz2;
  468.   diawiz2.m_question=WIZ_question;
  469.   if (diawiz2.DoModal()==IDOK)
  470.   strcpybuff(WIZ_reponse,"YES");
  471.   else
  472.     strcpybuff(WIZ_reponse,"NO");
  473. }
  474.  
  475. void CWinHTTrackApp::OnWizRequest3() {
  476.   WizLinks diawiz3;
  477.   diawiz3.m_url=WIZ_question;
  478.   if (diawiz3.DoModal()==IDskipall)
  479.     strcpybuff(WIZ_reponse,"*");
  480.   else
  481.     switch(diawiz3.m_lnk) {
  482.     case 0:
  483.       strcpybuff(WIZ_reponse,"0");
  484.       break;
  485.     case 1:
  486.       strcpybuff(WIZ_reponse,"1");
  487.       break;
  488.     case 2:
  489.       strcpybuff(WIZ_reponse,"2");
  490.       break;
  491.     case 3:
  492.       strcpybuff(WIZ_reponse,"4");
  493.       break;
  494.     case 4:
  495.       strcpybuff(WIZ_reponse,"5");
  496.       break;
  497.     case 5:
  498.       strcpybuff(WIZ_reponse,"6");
  499.       break;
  500.     default:
  501.       strcpybuff(WIZ_reponse,"");
  502.       break;
  503.   }
  504. }
  505.  
  506.  
  507. //
  508.  
  509.  
  510. /////////////////////////////////////////////////////////////////////////////
  511. // CWinHTTrackApp message handlers
  512.  
  513. // Ne fait pas partie de la classe
  514. /*
  515. UINT RunBackEngine( LPVOID pP ) {
  516.   static int running=0;
  517.   if (running)
  518.     return 0;
  519.   running=1;
  520.   {
  521.     CWinApp* app=AfxGetApp();
  522.     POSITION pos;
  523.     pos=app->GetFirstDocTemplatePosition();
  524.     CDocTemplate* templ = app->GetNextDocTemplate(pos);
  525.     pos=templ->GetFirstDocPosition();
  526.     CDocument* doc  = templ->GetNextDoc(pos);
  527.     pos=doc->GetFirstViewPosition();
  528.     CView*     view = doc->GetNextView(pos);
  529.     App_Main_HWND=view->m_hWnd;
  530.   }
  531.   //
  532.   CShellApp app;
  533.   app.InitInstance();
  534.   running=0;
  535.   return 0;
  536. }
  537. */
  538.  
  539. /*
  540. void CWinHTTrackApp::OnWizard() {
  541.   //this_CSplitterFrame->SetNewView(0,1,RUNTIME_CLASS(CDialogContainer));
  542. }
  543. */
  544.  
  545. afx_msg void CWinHTTrackApp::OnFileNew( ) {
  546.   OpenDocumentFile("");
  547. }
  548.  
  549. afx_msg void CWinHTTrackApp::OnFileOpen( ) {
  550.   this->CWinApp::OnFileOpen();
  551. }
  552.  
  553. void CWinHTTrackApp::OnFileSave() {
  554. }
  555.  
  556. void CWinHTTrackApp::OnFileSaveAs() 
  557. {
  558.     // TODO: Add your command handler code here
  559.     
  560. }
  561.  
  562. void CWinHTTrackApp::OnFileDelete()
  563. {
  564.   static char szFilter[256];
  565.   strcpybuff(szFilter,"WinHTTrack Website Copier Project (*.whtt)|*.whtt||");
  566.   CFileDialog* dial = new CFileDialog(true,"whtt",NULL,OFN_HIDEREADONLY,szFilter);
  567.   if (dial->DoModal() == IDOK) {
  568.     CString st=dial->GetPathName();
  569.     if (fexist((char*) LPCTSTR(st))) {
  570.       int pos=st.ReverseFind('.');
  571.       CString dir=st.Left(pos)+"\\";
  572.       char msg[1000];
  573.       sprintf(msg,"%s\r\n%s",LANG_DELETECONF,dir);
  574.       if (AfxMessageBox(msg,MB_OKCANCEL)==IDOK) {
  575.         if (remove(st)) {
  576.           AfxMessageBox("Error deleting "+st);
  577.         } else {
  578.           RmDir(dir);
  579.         }
  580.       }
  581.     } else
  582.       AfxMessageBox(LANG(LANG_G26 /*"File not found!","Fichier introuvable!"*/));
  583.   }
  584.   delete dial;
  585. }
  586.  
  587. void CWinHTTrackApp::OnBrowseWebsites()
  588. {
  589.   CString st=dialog0->GetBasePath();
  590.  
  591.   if (st.GetLength()<=1) {
  592.     CString strSection       = "DefaultValues";    
  593.     CWinApp* pApp = AfxGetApp();
  594.     st = pApp->GetProfileString(strSection, "BasePath");
  595.     st += "\\";
  596.   }
  597.  
  598.   st+="index.html";
  599.   ShellExecute(NULL,"open",st,"","",SW_RESTORE);    
  600. }
  601.  
  602. BOOL CWinHTTrackApp::RmDir(CString srcpath) {
  603.   CWaitCursor wait;
  604.  
  605.   if (srcpath.GetLength()==0)
  606.     return FALSE;
  607.   CString path=srcpath;
  608.   WIN32_FIND_DATA find;
  609.   if (path.Right(1)!="\\")
  610.     path+="\\";  
  611.   HANDLE h = FindFirstFile(path+"*.*",&find);
  612.   if (h != INVALID_HANDLE_VALUE) {
  613.     do {
  614.       if (!(find.dwFileAttributes  & FILE_ATTRIBUTE_SYSTEM ))
  615.       if (strcmp(find.cFileName,".."))
  616.       if (strcmp(find.cFileName,"."))
  617.         if (!(find.dwFileAttributes  & FILE_ATTRIBUTE_DIRECTORY )) {
  618.           if (remove(path+find.cFileName)) {
  619.             AfxMessageBox("Error deleting "+path+find.cFileName);
  620.             return FALSE;
  621.           }
  622.         } else {
  623.           if (!RmDir(path+find.cFileName))
  624.             return FALSE;
  625.         }
  626.     } while(FindNextFile(h,&find));
  627.     FindClose(h);
  628.   }
  629.   if (rmdir(srcpath)) {
  630.     AfxMessageBox("Error deleting "+srcpath);
  631.     return FALSE;
  632.   }
  633.   return TRUE;
  634. }
  635.  
  636.  
  637. void CWinHTTrackApp::OnFileMruFile1() 
  638. {
  639.     // TODO: Add your command handler code here
  640.     
  641. }
  642.  
  643. void CWinHTTrackApp::Onipabout() 
  644. {
  645.   Cabout about;
  646.   about.DoModal();
  647. }
  648.  
  649. void CWinHTTrackApp::OnUpdate() 
  650. {
  651.   CString st;
  652.   st.Format(HTS_UPDATE_WEBSITE,HTS_PLATFORM,LANGUAGE_NAME);
  653.   HtsHelper->Help(st);
  654. }
  655.  
  656. // Appel aide
  657. void CWinHTTrackApp::OnHelpInfo2() {
  658.   (void) OnHelpInfo(NULL);
  659. }
  660.  
  661. BOOL CWinHTTrackApp::OnHelpInfo(HELPINFO* dummy) 
  662. {
  663.   HtsHelper->Help("step2.html");
  664.   return true;
  665. }
  666.  
  667. // Forwards
  668.  
  669. void CWinHTTrackApp::FwOnhide() {
  670.   if (this_CSplitterFrame)
  671.     this_CSplitterFrame->Onhide();
  672.   else
  673.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  674. }
  675.  
  676. void CWinHTTrackApp::FwOnLoadprofile() {
  677.   if ((dialog1!=NULL) && (maintab!=NULL))
  678.     dialog1->OnLoadprofile();
  679.   else
  680.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  681. }
  682. void CWinHTTrackApp::FwOnSaveprofile() {
  683.   if ((dialog1!=NULL) && (maintab!=NULL))
  684.     dialog1->OnSaveprofile();
  685.   else
  686.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  687. }
  688. void CWinHTTrackApp::FwOnLoaddefault() {
  689.   if ((dialog1!=NULL) && (maintab!=NULL))
  690.     dialog1->OnLoaddefault();
  691.   else
  692.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  693. }
  694. void CWinHTTrackApp::FwOnSavedefault() {
  695.   if ((dialog1!=NULL) && (maintab!=NULL))
  696.     dialog1->OnSavedefault();
  697.   else
  698.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  699. }
  700. void CWinHTTrackApp::FwOnResetdefault() {
  701.   if ((dialog1!=NULL) && (maintab!=NULL))
  702.     dialog1->OnResetdefault();
  703.   else
  704.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  705. }
  706.  
  707. //
  708.  
  709. void CWinHTTrackApp::FwOnModifyOpt() {
  710.   if ((inprogress!=NULL) && (maintab!=NULL))
  711.     inprogress->OnModifyOpt();
  712.   else
  713.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  714. }
  715.  
  716. void CWinHTTrackApp::FwOnPause() {
  717.   if ((inprogress!=NULL) && (maintab!=NULL))
  718.     inprogress->OnPause();
  719.   else
  720.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  721. }
  722.  
  723. void CWinHTTrackApp::FwOniplogLog() {
  724.   if ((inprogress!=NULL) && (maintab!=NULL))
  725.     inprogress->OniplogLog();
  726.   else
  727.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  728. }
  729.  
  730. void CWinHTTrackApp::FwOniplogErr() {
  731.   if ((inprogress!=NULL) && (maintab!=NULL))
  732.     inprogress->OniplogErr();
  733.   else
  734.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  735. }
  736.  
  737. void CWinHTTrackApp::FwOnViewTransfers() {
  738.   if ((inprogress!=NULL) && (maintab!=NULL))
  739.     inprogress->OnViewTransfers();
  740.   else
  741.     AfxMessageBox(LANG_ACTIONNYP,MB_OK);
  742. }
  743.  
  744. CDocument* CWinHTTrackApp::OpenDocumentFile( LPCTSTR lpszFileName)
  745. {
  746.   // Eviter deux fenΩtres (un seul document)
  747.   // Le CMultui..->CSingleDoc.. est trop complexe α changer (α cause du splitter-wnd)
  748.   int count=1;
  749.  
  750.   { /* Check if a document exists, and if exists if empty or not, and if name is different */
  751.     POSITION pos;
  752.     pos=GetFirstDocTemplatePosition();
  753.     if (pos) {
  754.       CDocTemplate* tmpl=GetNextDocTemplate(pos);
  755.       if (tmpl) {
  756.         pos=tmpl->GetFirstDocPosition();
  757.         if (pos) {
  758.           CDocument* doc  = tmpl->GetNextDoc(pos);
  759.           if (doc) {
  760.             if (dialog0->GetName().GetLength()==0) {
  761.               CloseAllDocuments(FALSE);
  762.               count=0;        /* No documents */
  763.             } else {
  764.               if (dialog0->GetPath0()+".whtt" == LPCSTR(lpszFileName))
  765.                 return NULL;
  766.             }
  767.           }
  768.         } else
  769.           count=0;          /* No documents */
  770.       }
  771.     }
  772.   }
  773.  
  774.   // Ouvrir nouvelle instance
  775.   if (count) {
  776.     char cmdl[2048];
  777.     CWinApp* pApp = AfxGetApp();
  778.     CString name = pApp->m_pszHelpFilePath;
  779.     name=name.Left(name.GetLength()-4);
  780.     name += ".EXE";
  781.     strcpybuff(cmdl,"\"");
  782.     strcatbuff(cmdl,lpszFileName);
  783.     strcatbuff(cmdl,"\"");
  784.     ShellExecute(NULL,"open",name,cmdl,"",SW_RESTORE);
  785.     return NULL;
  786.   }
  787.  
  788.   // Ouvrir nouveau?
  789.   //if (count)
  790.   //  return;       // ne rien faire, car limitΘ α 1 document
  791.   //count++;
  792.  
  793.   /* Ouvrir */
  794.   /*
  795.   CWinApp* app=AfxGetApp();
  796.   POSITION pos;
  797.   pos=app->GetFirstDocTemplatePosition();
  798.   CDocTemplate* templ = app->GetNextDocTemplate(pos);
  799.   pos=templ->GetFirstDocPosition();
  800.   if (pos) {
  801.     CDocument* doc  = templ->GetNextDoc(pos);
  802.     if (doc)
  803.       if (!doc->SaveModified())
  804.         return NULL;
  805.   }
  806.   CloseAllDocuments(FALSE);
  807.   */
  808.   if (strlen(lpszFileName))
  809.     return CWinApp::OpenDocumentFile(lpszFileName);
  810.   else
  811.     CWinApp::OnFileNew();
  812.   return NULL;
  813. }
  814.  
  815. void CWinHTTrackApp::NewTabs() {
  816.   DeleteTabs();
  817.   m_tab0 = new CFirstInfo();
  818.   m_tab1 = new CNewProj();
  819.   m_tab2 = new Wid1();
  820.   m_tab3 = new Ctrans();
  821.   m_tabprogress = new Cinprogress();
  822.   m_tabend = new Cinfoend();
  823. }
  824.  
  825. void CWinHTTrackApp::DeleteTabs() {
  826.   if (m_tab0)
  827.   if (m_tab0->GetSafeHwnd())       /* a dΘja ΘtΘ dΘtruit par CWinApp */
  828.     delete m_tab0;
  829.   if (m_tab1)
  830.   if (m_tab1->GetSafeHwnd())
  831.     delete m_tab1;
  832.   if (m_tab2)
  833.   if (m_tab2->GetSafeHwnd())
  834.     delete m_tab2;
  835.   if (m_tab3)
  836.   if (m_tab3->GetSafeHwnd())
  837.     delete m_tab3;
  838.   if (m_tabprogress)
  839.   if (m_tabprogress->GetSafeHwnd())
  840.     delete m_tabprogress;
  841.   if (m_tabend)
  842.   if (m_tabend->GetSafeHwnd())
  843.     delete m_tabend;
  844.  
  845.   m_tab0=NULL;
  846.   m_tab1=NULL;
  847.   m_tab2=NULL;
  848.   m_tab3=NULL;
  849.   m_tabprogress=NULL;
  850.   m_tabend=NULL;
  851. }
  852.  
  853. int CWinHTTrackApp::ExitInstance() 
  854. {
  855.   LANG_DELETE();
  856.  
  857.   /* Uninitialize */
  858.   hts_uninit();
  859.  
  860.   return CWinApp::ExitInstance();
  861. }
  862.